const fs = require('fs');
const path = require('path');

// fs.stat =>获取文件信息
let getStat = (path) => {
  return new Promise((resolve, reject) => {
    fs.stat(path, (err, stats) => {
      if (err) resolve(false);

      // console.log(stats);
      resolve(stats);
    });
  });
};

let mkdir = dir => {
  return new Promise((resolve, reject) => {
    fs.mkdir(dir, err => {
      if (err) resolve(false);
      resolve(true);
    });
  });
};

/**
 * 路径是否存在，不存在则创建
 * @param {string} dir 路径
 */
let dirExists = async dir => {
  let isExists = await getStat(dir);

  if (isExists) {
    if (isExists.isDirectory()) { // 如果改路径存在且是目录，则返回true
      return true;
    }
    return false; // 如果该路径存在且不是目录，返回false
  }

  // 如果路径不存在
  let tempDir = path.parse(dir).dir; // 拿到上级目录

  // 递归判断，如果上级目录也不存在，则会代码会在此处继续循环执行，直到目录存在
  let status = await dirExists(tempDir);
  let mkdirStatus;

  if (status) {
    mkdirStatus = await mkdir(dir);
  }

  return mkdirStatus;
}

module.exports = {
  getStat,
  mkdir,
  dirExists
};
